--
-- Fueraza a mayúsculas el tipo de comprobante
--

-- Funcion transitoria 
-- que controla si existen comprobantes que pueden tener el mismo codigo mayuscula-minuscula, si existen falla todo.

CREATE OR REPLACE FUNCTION cliente.control_comprobantes()
    RETURNS boolean
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

BEGIN
  IF EXISTS (SELECT * FROM COM WHERE EXISTS (SELECT * FROM COM MINUS 
					      WHERE MINUS.TIPO <> COM.TIPO AND 
					      UPPER(MINUS.TIPO) = UPPER(COM.TIPO))
			) THEN 
	 RAISE EXCEPTION 'Error - no se puede actualizar porque habrá comprobantes repetidos';
  END IF;
  RETURN TRUE;
  
END;
$BODY$;

ALTER FUNCTION cliente.control_comprobantes()
    OWNER TO abacouser;

SELECT cliente.control_comprobantes();

DROP FUNCTION cliente.control_comprobantes();

CREATE FUNCTION public.tg_com_altacom()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
BEGIN
-- Obliga a mayúsculas porque tipo es clave y no funcionan bien los locates en gestion
NEW.Tipo := UPPER(NEW.Tipo);
RETURN NEW;
END;
$BODY$;

ALTER FUNCTION public.tg_com_altacom()
    OWNER TO abacouser;
	
DROP TRIGGER IF EXISTS com_001_ins on public.com;

CREATE TRIGGER com_001_ins
    BEFORE INSERT 
    ON public.com
    FOR EACH ROW
    EXECUTE PROCEDURE public.tg_com_altacom();
--   
SELECT aaversion('516.02','516.01');
--    


